iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Software Development

我們與Maven的距離系列 第 6

Day05 - Maven Quick Start

  • 分享至 

  • xImage
  •  

前言

我們從前面的Java一般專案感受到我們開發的流程中有多們多的手動流程等著我們(從下載Jar、compile、test、deploy等),我們在Java Web專案感受與IDE耦合的專案會讓我們沒有辦法隨心所欲使用我們愛的IDE工具,今日我們試著使用maven工具來幫我們解決

創建專案

我們在command line使用maven創建我們的專案

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.5 -DinteractiveMode=false

產生專案結構如下,他幫我們在src下分別創建main與test資料夾分隔測試程式碼與開發的程式碼,未來打包我們就可以只針對src/main下進行打包

\---my-app
    |   pom.xml
    |
    +---.mvn
    |       jvm.config
    |       maven.config
    |
    \---src
        +---main
        |   \---java
        |       \---com
        |           \---mycompany
        |               \---app
        |                       App.java
        |
        \---test
            \---java
                \---com
                    \---mycompany
                        \---app
                                AppTest.java

pom檔裡面乘載我們需要最基本所需要使用的測試jar套件的資訊,以及構建相關所需的maven plugin,當然還有不可或缺的JDK版本。我們在下加入我們先前專案使用的logback

<dependencies>
    <!-- logback -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.5.18</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>2.0.17</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
</dependencies>

開發

App.java

package com.mycompany.app;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * Hello world!
 */
public class App {
    // 建立 Logger 實例
    private static final Logger logger = LoggerFactory.getLogger(App.class);

    public static void main(String[] args) {
        logger.info("Application running...");
        System.out.println(runApplication());
        logger.info("Application finished.");
    }
    public static String runApplication() {
        return "Hello World!";
    }
}

AppTest.java

package com.mycompany.app;


import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

/**
 * Unit test for simple App.
 */
public class AppTest {

    @Test
    public void testRunApplication() {
        assertEquals("Hello World!", App.runApplication());
    }
}

修改pom.xml中的tag build,設定產出jar檔的名稱

<build>
    <finalName>MyApp</finalName>
    <!-- 略 -->
</build>

測試

執行command

mvn test

測試結果
https://ithelp.ithome.com.tw/upload/images/20250920/201280849y7tySzEu6.png

打包

執行command

mvn package

https://ithelp.ithome.com.tw/upload/images/20250920/20128084gI1bb8WdVQ.png

部署

搬檔案(MyApp.jar)到MyApp資料夾目錄,並修改bat檔

@echo off
java -cp "MyApp.jar;lib\*" com.mycompany.app.App
pause

執行bat結果
https://ithelp.ithome.com.tw/upload/images/20250920/201280846l3NRPNKO6.png

小結

今天的Maven command解決了什麼樣的事情呢

  • 分別創建開發與測試資料夾,測試程式碼分開
  • 透過pom檔可以快速下載jar檔,不用在人工下載jar
  • mvn test就可以輕鬆完成測試
  • mvn package讓我們可以輕鬆編譯打包為jar

reference


上一篇
Day04 - Java Web Project and IDEs
下一篇
Day06 - Maven Intruction
系列文
我們與Maven的距離8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言